home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Atari Mega Archive 1
/
Atari Mega Archive - Volume 1.iso
/
archiver
/
zoo21src.zoo
/
mstime.i
< prev
next >
Wrap
Text File
|
1991-07-24
|
3KB
|
96 lines
#ifndef LINT
static char mstimeid[]="@(#) mstime.i 2.2 88/01/24 12:47:58";
#endif /* LINT */
/*
(C) Copyright 1987 Rahul Dhesi -- All rights reserved
*/
#define BASEYEAR 1970
/****************
Function mstime() converts time in seconds since January 1 of BASEYEAR
to MS-DOS format date and time.
*/
void mstime(longtime, date, time)
long longtime; /* input: seconds since Jan 1, BASEYEAR */
int *date, *time; /* output: MS-DOS format date and time */
{
static int daysinmo[] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
#define FEBRUARY 1
int year, month, day, hour, min, sec;
long secsinhour, secsinday, secsinyear, secsinleapyear;
int leapyear; /* is this a leap year? */
int done; /* control variable */
secsinhour = (long) (60 * 60); /* seconds in an hour */
secsinday = 24 * secsinhour; /* seconds in a day */
secsinyear = 365 * secsinday; /* seconds in a year */
secsinleapyear = secsinyear + secsinday; /* seconds in a leap year */
#ifdef DEBUG
printf("mstime: input longtime = %ld\n", longtime);
#endif
/* We can't handle dates before 1970 so force longtime positive */
if (longtime < 0)
longtime = 0;
/*
Step through years from BASEYEAR onwards, subtracting number of
seconds in each, stopping just before longtime would become negative.
*/
year = BASEYEAR;
done = 0;
while (!done) {
long yearlength;
leapyear = (year % 4 == 0 && year % 100 != 0 || year % 400 == 0);
if (leapyear)
yearlength = secsinleapyear;
else
yearlength = secsinyear;
if (longtime >= yearlength) {
longtime -= yearlength;
year++;
} else
done++;
}
/* Now `year' contains year and longtime contains remaining seconds */
daysinmo[FEBRUARY] = leapyear ? 29 : 28;
month = 0; /* range is 0:11 */
while (longtime > daysinmo[month] * secsinday) {
longtime = longtime - daysinmo[month] * secsinday;
month++;
}
month++; /* range now 1:12 */
day = longtime / secsinday; /* day of month, range 0:30 */
longtime = longtime % secsinday;
day++; /* day of month, range 1:31 */
hour = longtime / secsinhour; /* hours, range 0:23 */
longtime = longtime % secsinhour;
min = longtime / 60L; /* minutes, range 0:59 */
longtime = longtime % 60L;
sec = longtime; /* seconds, range 0:59 */
#ifdef DEBUG
printf("mstime: date = %4d/%02d/%02d time = %02d:%02d:%02d\n",
year, month, day, hour, min, sec);
if (leapyear)
printf("(leap year)\n");
#endif
if (year < 1980)
year = 1980;
*date = day + (month << 5) + ((year - 1980) << 9);
*time = (sec / 2) + (min << 5) + (hour << 11);
}